package co.com.desarrollo.pedidos.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import co.com.desarrollo.pedidos.dao.UsuarioDAO;
import co.com.desarrollo.pedidos.entities.Usuario;

@Repository("usuarioDAO")
public class JpaUsuarioDAOImpl implements UsuarioDAO {

	@PersistenceContext
	private EntityManager entityManager;
	
	@Transactional
	public void delete(long usuarioId) {
		entityManager.remove(entityManager.find(Usuario.class, usuarioId));
	}

	@Transactional(readOnly = true)
	public List<Usuario> findAll() {
		return entityManager.createQuery("from Usuario",Usuario.class).getResultList();
	}

	@Transactional(readOnly = true)
	public Usuario findById(long usuarioId) {		
		return entityManager.find(Usuario.class, usuarioId);
	}

	@Transactional
	public Usuario store(Usuario usuario) {
		return entityManager.merge(usuario);
	}

	@Transactional(readOnly = true)
	public Usuario findByDocument(String document) {
		return entityManager.createQuery("from Usuario u where u.documento = '"+document+"'", Usuario.class).getSingleResult();
	}

	@Transactional(readOnly = true)
	public Usuario findByEmail(String email) {
		return entityManager.createQuery("from Usuario u where u.correo = '"+email+"'", Usuario.class).getSingleResult();
	}

	@Transactional(readOnly = true)
	public List<Usuario> findByNombreApellido(String nombre, String apellido) {
		return entityManager.createQuery("from Usuario u where u.nombre like '%"+nombre+"%' and u.apellido like '%"+apellido+"%'", Usuario.class).getResultList();
	}

	@Transactional(readOnly = true)
	public List<Usuario> findByRol(long rolId) {
		return entityManager.createQuery("from Usuario u where u.rol.idrol = "+rolId, Usuario.class).getResultList();
	}

	@Transactional(readOnly = true)
	public List<Usuario> findUsuariosActivos() {
		return entityManager.createQuery("from Usuario u where u.activo = 1", Usuario.class).getResultList();
	}

}
